// 导入登录接口
import { login, getUserInfo, getUserBasicInfo } from '@/api/user.js'
// 导入重置路由表的函数
import { resetRouter } from '@/router/index'
// 导入操作token的文件
import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
const state = {
  // 因为下面请求时 token已经保存到本地 所以这里可以获取token 给一个默认值
  token: getToken(), // 用来保存token
  userInfo: {} // 用户个人资料
}
const mutations = {
  // 用来修改token中的数据
  setToken (state, token) {
    state.token = token
    // 保存到本地 cookies
    setToken(token)
    // 保存token的同时 保存获取token时的时间戳
    setTimeStamp()
  },
  // 修改state中的用户信息
  setUserInfo (state, payload) {
    state.userInfo = payload
  },
  removeToken (state) {
    state.token = '' //删除vuex里的token
    removeToken() // 删除本地的token
  },
  removeUeerInfo (state) {
    state.userInfo = {}
  }
}
const actions = {
  // 登录接口
  async login (context, data) {
    // data是从login访问的地方传递过来的
    try {
      let res = await login(data)
      // console.log(res)
      // 保存到vuex
      context.commit('setToken', res.data)
    } catch (error) {
      //请求失败 抛出错误 这样login就能看到了
      return Promise.reject(error)
    }
  },
  // 获取用户个人信息接口
  async getUserInfo (context) {
    // 获取个人信息
    let res = await getUserInfo()
    // 用户基本信息 （包含头像）
    let res2 = await getUserBasicInfo(res.data.userId)

    let allInfo = {
      ...res.data,
      ...res2.data
    }
    // 修改state中的userInfo
    context.commit('setUserInfo', allInfo)
    return allInfo
  },
  // 退出登录
  logout ({ commit, dispatch }) {
    commit('removeToken')
    // 删除token 既删除vuex里的 数据 也删除本地保存的token
    commit('removeUeerInfo') // 清空用户信息
    // 重置路由表
    resetRouter()
    // 清空页签
    dispatch('tagsView/delAllViews', null, { root: true })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
